Jupyter Content Management Extensions使ってみた

データサイエンティストに向けたコーディング環境Jupyter Notebookの勧め で紹介されていたnotebook内の全文検索を試してみたかった。

いきなりだけどまとめ

全文検索以外にもいろいろあるけど、全文検索が一番使える

repogitory and pypi

  • https://github.com/jupyter-incubator/contentmanagement
  • https://pypi.python.org/pypi/jupyter_cms

install

pip install jupyter_cms
Collecting jupyter-cms
  Downloading jupyter_cms-0.4.0.tar.gz
Collecting whoosh<3.0,>=2.7.0 (from jupyter-cms)
  Downloading Whoosh-2.7.3.zip (1.1MB)

extensionとしてのinstallと有効化

% jupyter cms install --user --symlink --overwrite
[ExtensionInstallApp] Installing jupyter_cms JS notebook extensions
symlink /Users/xxx/Library/Jupyter/nbextensions/jupyter_cms
-> /Users/xxx/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/jupyter_cms/nbextension

% jupyter cms activate
% jupyter cms help
% jupyter cms install --help-all

# 以下、RISEと同じ場所に置こうとして、extensionが起動しなかったメモ
# とsymlink削除(-rfは危ないのでやめよう)
% jupyter cms install --symlink --overwrite --nbextensions=~/.local/share/jupyter/nbextension
% rm /Users/xxx/Library/Jupyter/nbextensions/jupyter_cms

全文検索

の前に

  • モジュール名の変更
    • https://github.com/jupyter-incubator/contentmanagement/commit/6045d4ef0e0d38c7cb38ea9f231333d950ddae95
  • 0.4.0のチュートリアル
    • https://github.com/jupyter-incubator/contentmanagement/blob/b7d34b3c4aeab1f7cfa06323b6741080b54f62b5/etc/notebooks/cookbooks_demo/use_cookbooks.ipynb
    • チュートリアルの変更(load_extの変更)
      • https://github.com/jupyter-incubator/contentmanagement/commit/b7d34b3c4aeab1f7cfa06323b6741080b54f62b5#diff-f0a4308977e69922b3419d67f5b5bdb2L11

その他デフォルトでできること

  • Table of Contents(TOC)の表示
  • ファイルのDrag & Dropによるアップロード
  • 他のnotebookのセルをimport
  • 他のnotebookのセルを関数として利用

試してみた感想

  • TOCは http://qiita.com/ksomemo/items/ba0f24daae2276ffd9b2 でも紹介したとおり、他のextensionにあるのでいらない
  • アップロードはmdとjsonはできなかったが、TSVはアップロードできた

他のnotebookのセルをimport

  • セルに#<help>コメント, #<help:name>でhelp method/name methodを使えるようになる
  • 上記methodを実行すると、他のnotebookのセルをimportできる(このときにセルの選択が固まる…)
  • 実際にそのセルを現在のnotebookで使うときには%injectを使う
  • コメントめんどう

他のnotebookのセルを関数として利用

  • セルに# <api>コメントを書くと、notebook読み込み時に実行される
  • 関数定義しておくと、その関数がnotebookのmethodとして定義される
  • こちらは問題なく動作した
  • こちらもコメントめんどう